package cn.wolfcode.trip.api.controller;

import cn.wolfcode.trip.base.domain.User;
import cn.wolfcode.trip.base.query.TravelQuery;
import cn.wolfcode.trip.base.service.ITravelService;
import cn.wolfcode.trip.base.service.IUserService;
import cn.wolfcode.trip.base.util.JsonResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 注册用户接口
 */
@RestController
@RequestMapping("users")
@Api(value = "用户资源",description = "用户资源控制器")
public class UserController {

    @Autowired
    private IUserService userService;

    @Autowired
    private ITravelService travelService;

    /**
     * 注册用户接口
     * 1.资源   /users
     * 2.请求方式 post
     * 3.请求参数 昵称/邮箱/密码(用户对象接收)
     * 4.返回结果 JsonResult
     */
    @PostMapping
    @ApiOperation(value = "注册功能",notes = "其实就是新增用户")
    @ApiResponses({
            @ApiResponse(code=200,message="用户注册成功")
    })
   /* @ApiImplicitParams({
            @ApiImplicitParam(value = "昵称",name = "nickName",dataType = "String",required = true),
            @ApiImplicitParam(value = "邮箱",name = "email",dataType = "String",required = true),
            @ApiImplicitParam(value = "密码",name = "password",dataType = "String",required = true)
    })*/
    public JsonResult register(User user){
        JsonResult json = new JsonResult();
        try {
            userService.register(user);
        } catch (Exception e) {
            e.printStackTrace();
            json.mark(e.getMessage());
        }
        return json;
    }

    /**
     * 修改用户信息接口
     * 1.资源 /users/{id}
     * 2.请求方式 put
     * 3.请求参数 user对象
     * 4.返回结果 JsonResult
     */
    @PutMapping("{id}")
    public JsonResult update(User user){
        JsonResult json = new JsonResult();
        try {
            userService.update(user);
            json.setData(user);
        } catch (Exception e) {
            e.printStackTrace();
            json.mark(e.getMessage());
        }
        return json;
    }

    /**
     * 获取我的游记资源接口
     * 1.资源  /users/{id}/travels
     * 2.请求方式 get
     * 3.请求参数 TravelQuery
     * 4.返回结果 PageInfo
     */
    @GetMapping("{authorId}/travels")
    public PageInfo query(TravelQuery qo){
        qo.setOrderBy("t.lastUpdateTime desc");//按照最后更新时间倒序排序
        return travelService.query(qo);
    }

    /**
     * 关注与取消关注 的接口
     * 1.资源  /users/follow/{followId}
     * 2.请求方式 put
     * 3.请求参数 followId 被关注人的id, num 1为关注 -1为取消关注
     * 4.返回结果 JsonResult
     */
    @PutMapping("follow/{starId}")
    public JsonResult follow(@PathVariable Long starId, int num){
        JsonResult json = new JsonResult();
        try {
            userService.follow(starId, num);
        } catch (Exception e) {
            e.printStackTrace();
            json.mark(e.getMessage());
        }
        return json;
    }
    /**
     * 判断 被访问的用户是否是用户已经关注过的
     * 1.资源  /users/follow/{followId}
     * 2.请求方式 get
     * 3.请求参数 followId 被访问的用户id
     * 4.返回结果 true为已经关注
     */
    @GetMapping("follow/{starId}")
    public boolean judgeFollow(@PathVariable Long starId){
        return userService.judgeFollow(starId);
    }


    /**
     * 获取指定用户信息
     * 1.资源  /users/{id}/
     * 2.请求方式 get
     * 3.请求参数 路径占位符
     * 4.返回结果 User对象
     */
    @GetMapping("{id}")
    public User get(@PathVariable Long id){
        return userService.get(id);
    }

    /**
     * 获取用户关注的所有人
     * 1.资源  /users/{id}/follows
     * 2.请求方式 get
     * 3.请求参数 路径占位符
     * 4.返回结果 list
     */
    @GetMapping("{id}/follows")
    public List<User> getFollows(@PathVariable Long id){
        return userService.getFollows(id);
    }
}
